/**
 * 封装网络请求
 */
import hx from '@/uni_modules/hxjz-hx'
import { BASE_URL, REQUEST_ERROR_CODE } from './config';
import userInfoStore from '@/store/modules/user'
const userInfo = userInfoStore()
const accessToken = userInfo?.accessToken || (uni.getStorageSync('userInfoStore') ? JSON.parse(uni.getStorageSync('userInfoStore')).accessToken : '')
/**
 * 封装获取请求
 * @param {object} params - 请求参数
 * @returns {Promise} 返回请求结果的 Promise
 */
function getRequestUrl(url : string) {
	let result = BASE_URL + '/api/miniPro' + url
	// #ifdef H5
	result = '/api/miniPro' + url
	// #endif
	return result
}
interface Params {
	url : string, // 请求地址
	method : string, // 请求方式
	data ?: object, // 请求数据
	header ?: object // 需要特殊设置的请求头参数
}
export const request = (params : Params) : Promise<any> => {
	return new Promise((resolve : Function, reject : Function) => {
		hx.request({
			url: getRequestUrl(params.url),
			data: params.data,
			method: params.method == 'post' ? 'POST' : 'GET',
			header: params.header ? Object.assign({
				'content-type': 'application/json', // 默认值
				env: 'dev',
				accessToken: accessToken
			}, params.header) : {
				'content-type': 'application/json', // 默认值
				env: 'dev',
				accessToken: accessToken
			},


		}).then((result : any) => {
			if (result.data.respCode === REQUEST_ERROR_CODE.INVALID_TOKEN) {
				// 登录失败，请重新登录
				uni.showToast({
					title: result.data.msg,
					icon: 'none'
				});
				uni.clearStorageSync();
				uni.reLaunch({
					url: '/pages/index/index'
				});
			} else {
				if (result.data.respCode === REQUEST_ERROR_CODE.SUCCESS) {
					// 请求成功，就将成功的数据返回出去
					resolve(result.data);
				} else {
					uni.showToast({
						title: result.data.respMsg,
						icon: 'none'
					});
					reject(result.data.respMsg)
				}
			}
		}).catch((err : any) => {
			reject(err);
		});
	});
}
/**
 * 封装上传请求
 * @param {string} url - 传递过来的请求地址
 * @param {*} filePath - 传递过来的上传数据
 *
 * @returns {Promise} 返回请求结果的 Promise
 */
export const uploadeHttp = (url : string, filePath : any) : Promise<any> => {
	return new Promise((resolve : Function, reject : Function) => {
		uni.uploadFile({
			url: BASE_URL + url,
			filePath: filePath,
			name: 'file',
			header: {
				'content-type': 'application/json', // 默认值
				accessToken: accessToken
			},
			success: (result : any) => {
				let rquestData = JSON.parse(result.data);
				if (rquestData.respCode === REQUEST_ERROR_CODE.INVALID_TOKEN) {
					// 登录失败，请重新登录
					uni.showToast({
						title: rquestData.msg,
						icon: 'none'
					});
					uni.clearStorageSync();
					uni.reLaunch({
						url: '/pages/index/index'
					});
				} else {
					// 请求成功，就将成功的数据返回出去
					resolve(rquestData);
				}
			},
			fail: (err : any) => {
				reject(err);
			}
		});
	});
};